package com.chart.common.utils.uuid;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * ID生成器工具类
 * 
 * @author chart
 */
public class IdUtils
{



    // 获取当前时分秒+毫秒并生成10位随机数字       时间戳和随机数字
    public static String generateRandomNumber() {
        // 获取当前的时分秒+毫秒，格式为 HHmmssSSS
        SimpleDateFormat sdf = new SimpleDateFormat("HHmmssSSS");
        String format = sdf.format(new Date()); // 当前时分秒+毫秒

        String randomNumber = generateRandomNumber(10); // 生成10位随机数字

        // 拼接时间戳和随机数字
        String uniqueId = format + randomNumber;

        return uniqueId;
    }

    // 生成指定长度的随机数字字符串
    private static String generateRandomNumber(int length) {
        Random random = new Random();
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            // 生成0到9之间的随机数字
            sb.append(random.nextInt(10));
        }
        return sb.toString();
    }
    /**
     * 获取随机UUID
     * 
     * @return 随机UUID
     */
    public static String randomUUID()
    {
        return UUID.randomUUID().toString();
    }

    /**
     * 简化的UUID，去掉了横线
     * 
     * @return 简化的UUID，去掉了横线
     */
    public static String simpleUUID()
    {
        return UUID.randomUUID().toString(true);
    }

    /**
     * 获取随机UUID，使用性能更好的ThreadLocalRandom生成UUID
     * 
     * @return 随机UUID
     */
    public static String fastUUID()
    {
        return UUID.fastUUID().toString();
    }

    /**
     * 简化的UUID，去掉了横线，使用性能更好的ThreadLocalRandom生成UUID
     * 
     * @return 简化的UUID，去掉了横线
     */
    public static String fastSimpleUUID()
    {
        return UUID.fastUUID().toString(true);
    }

    // 获取当前时分秒+毫秒并生成10位随机数字作为唯一的int ID
    public static int generateUniqueIntId() {
        // 获取当前的时分秒+毫秒，格式为 HHmmssSSS
        SimpleDateFormat sdf = new SimpleDateFormat("HHmmssSSS");
        String format = sdf.format(new Date()); // 当前时分秒+毫秒

        // 生成10位随机数字
        String randomNumber = generateRandomNumber(10);

        // 拼接时间戳和随机数字
        String uniqueIdStr = format + randomNumber;

        // 转换成整数并返回
        try {
            return Integer.parseInt(uniqueIdStr.substring(0, 10)); // 截取前10位，确保它适合int
        } catch (NumberFormatException e) {
            throw new RuntimeException("生成唯一ID失败", e);
        }
    }





}
